package itheima01;

import java.io.*;

/*
    字节缓冲流复制文件
    步骤:
        1.创建高效缓冲字节输入流BufferedInputStream类的对象bis,传递FileInputStream类的对象fis,绑定源文件
        2.创建高效缓冲字节输出流BufferedOutputStream类的对象bos,传递FileOutputStream类的对象fos,绑定目标文件
        3.循环读(源文件)写(目标文件): 单字节/字节数组
        4.关闭流释放资源

    时间对比:
        1.缓冲流单字节复制: 320
        2.缓冲流字节数组复制: 18
 */
public class Demo03BufferedCopyFile {
    public static void main(String[] args) throws IOException {
        //创建源文件对应的File对象
        File srcFile = new File("day12\\from\\f1.flv");
        //创建目标文件对应的File对象
        File destFile = new File("day12\\dest\\f1.flv");

        //获取开始时间
        long start = System.currentTimeMillis();

        //调用方法,完成复制
        bufferedCopyFile02(srcFile,destFile);

        //获取结束时间
        long end = System.currentTimeMillis();

        //计算总耗时
        System.out.println("总耗时: "+(end-start));
    }
    //字节数组循环读写文件
    private static void bufferedCopyFile02(File srcFile, File destFile) throws IOException{
        //1.创建高效缓冲字节输入流BufferedInputStream类的对象bis,传递FileInputStream类的对象fis,绑定源文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));

        //2.创建高效缓冲字节输出流BufferedOutputStream类的对象bos,传递FileOutputStream类的对象fos,绑定目标文件
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

        //3.循环读(源文件)写(目标文件): 字节数组

        int len = 0;

        byte[] bs = new byte[1024*8];
        while((len = bis.read(bs))!=-1) {
            bos.write(bs,0,len);
        }
        //4.关闭流释放资源
        bis.close();
        bos.close();
    }

    //单字节循环读写文件
    private static void bufferedCopyFile01(File srcFile, File destFile) throws IOException {
        //1.创建高效缓冲字节输入流BufferedInputStream类的对象bis,传递FileInputStream类的对象fis,绑定源文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));

        //2.创建高效缓冲字节输出流BufferedOutputStream类的对象bos,传递FileOutputStream类的对象fos,绑定目标文件
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

        //3.循环读(源文件)写(目标文件): 单字节
        int b = 0;
        while((b = bis.read())!=-1) {
            bos.write(b);
        }
        //4.关闭流释放资源
        bis.close();
        bos.close();
    }
}
